import axios from 'axios'
import { baseURL } from '@/config'
class HttpRequest {
  constructor (baseUrl = baseURL) { // 相当于 baseUrl = baseUrl || baseURL
    this.baseUrl = baseUrl
    this.queue = {}
  }

  getInsideConfig () {
    const config = { // 全局使用的配置
      baseUrl: this.baseUrl

    }
    return config
  }

  interceptors (instance, url) { // 拦截器
    instance.interceptors.request.use(config => { // 请求拦截器
      // 添加全局的loading....
      // Spin.show()
      if (!Object.keys(this.queue).length) // Spin.show()
      { this.queue[url] = true }
      return config
    }, error => { // 请求失败
      return Promise.reject(error)
    })
    instance.interceptors.response.use(res => {
      delete this.queue[url] // 使用delete操作符把url删除
      console.log(res)
      const { data, status } = res // res里的属性基本只能用到data,status
      return { data, status }
    }, error => { // 请求失败
      delete this.queue[url]
      return Promise.reject(error)
    })
  }

  request (options) {
    const instance = axios.create()
    options = Object.assign(this.getInsideConfig(), options) // 使用Object.assign()方法将两个对象合并成一个对象，如果两个对象中有相同的属性名，将会用后面的替换前面的
    this.interceptors(instance, options.url)
    return instance(options)
  }
}
export default HttpRequest
